package com.gdut.laiagent.rag;

import org.springframework.ai.chat.client.advisor.RetrievalAugmentationAdvisor;
import org.springframework.ai.chat.client.advisor.api.Advisor;
import org.springframework.ai.rag.retrieval.search.VectorStoreDocumentRetriever;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.ai.vectorstore.filter.Filter;
import org.springframework.ai.vectorstore.filter.FilterExpressionBuilder;

/**
 * 创建自定义的 RAG 检索增强顾问工厂
 */
public class LoveAppRagCustomAdvisorFactory {

    // 加 static 可以让方法属于类本身而不是属于类的实例
    public static Advisor createLoveAppRagCustomAdvisor(VectorStore vectorStore, String status){

        // 文档过滤器，过滤特定状态的文档
        Filter.Expression expression = new FilterExpressionBuilder()
                .eq("status", status)
                .build();

        // 文档检索器
        VectorStoreDocumentRetriever documentRetriever = VectorStoreDocumentRetriever.builder()
                .vectorStore(vectorStore)
                .filterExpression(expression)
                // 相似度阈值
                .similarityThreshold(0.5)
                // 返回文件数量
                .topK(3)
                .build();

        return RetrievalAugmentationAdvisor.builder()
                // 文档检索器
                .documentRetriever(documentRetriever)
                // 查询增强器
                .queryAugmenter(LoveAppContextualQueryAugmenterFactory.createInstance())
                .build();
    }
}
